package com.wd.mylive.view.fragment
//開播

import android.content.Intent
import android.graphics.BitmapFactory
import android.graphics.Path.Op
import android.view.View
import android.widget.Toast
import androidx.core.content.ContentProviderCompat
import androidx.core.content.ContentProviderCompat.requireContext
import com.hyphenate.util.UriUtils
import com.ksyun.media.streamer.capture.CameraCapture
import com.ksyun.media.streamer.filter.imgtex.ImgTexFilterMgt
import com.ksyun.media.streamer.kit.KSYStreamer
import com.ksyun.media.streamer.kit.StreamerConstants
import com.wd.base.App
import com.wd.current.model.Bean.DataBean

import com.wd.live.base.BaseFragment
import com.wd.mylive.R
import com.wd.mylive.databinding.FragmentLiveBinding
import com.wd.mylive.viewmodel.LiveViewModel
import java.io.File


class LiveFragment  : BaseFragment<LiveViewModel,FragmentLiveBinding>(R.layout.fragment_live) {
    private var file: File?=null
    override fun dataObserver() {

    }

    override fun initViews() {

        ismStreamer()
        binding.guan.setOnClickListener(object : View.OnClickListener {
            override fun onClick(p0: View?) {
                Toast.makeText(requireContext(), "关闭直播", Toast.LENGTH_SHORT).show()
                viewmodel.closeLive(App.userId, App.sessionId)
                mStreamer.stopStream()
            }
        })
        binding.coverImageLiveId.setOnClickListener(object : View.OnClickListener {
            override fun onClick(p0: View?) {
                val intent = Intent(Intent.ACTION_PICK)
                intent.type="image/*"
                startActivityForResult(intent, 1)
            }

        });
        binding.text2.setOnClickListener(object : View.OnClickListener {
            override fun onClick(p0: View?) {
                if(binding.text2.isChecked){
                    Toast.makeText(requireContext(),"开启滤镜",Toast.LENGTH_SHORT).show()
                    mStreamer.getImgTexFilterMgt().setFilter(
                        mStreamer.getGLRender(), ImgTexFilterMgt.KSY_FILTER_BEAUTY_SOFT
                    );
                }else
                {
                    Toast.makeText(requireContext(),"关闭滤镜",Toast.LENGTH_SHORT).show()
                    mStreamer.getImgTexFilterMgt().setFilter(
                        mStreamer.getGLRender(),
                        ImgTexFilterMgt.KSY_FILTER_BEAUTY_DISABLE
                    );
                }


            }
        });
        binding.startLiveId.setOnClickListener(object : View.OnClickListener {
            override fun onClick(p0: View?) {
                if (file==null){
                    val intent = Intent(Intent.ACTION_PICK)
                    intent.type="image/*"
                    startActivityForResult(intent, 1)
                } else {
                  var text=  binding.titleTextLiveId.text.toString()
                        viewmodel.postOpenLive(App.userId,App.sessionId,text,file!!)

                }
            }
        });
        viewmodel.openLiveData.observe(this, androidx.lifecycle.Observer {
            Toast.makeText(activity,it.message,Toast.LENGTH_SHORT).show()
            if("0000".equals(it.status)){


            }else{

            }
        })

    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if(data!=null){
            file=com.blankj.utilcode.util.UriUtils.uri2File(data.getData())
           binding.coverImageLiveId.setImageBitmap(BitmapFactory.decodeFile(file!!.getAbsolutePath()))

        }
    }
    lateinit var mStreamer: KSYStreamer
    fun ismStreamer() {
        // 创建KSYStreamer实例
        mStreamer = KSYStreamer(getActivity())
// 设置预览View
        mStreamer.setDisplayPreview(binding.cameraPreview);
// 设置推流url（需要向相关人员申请，测试地址并不稳定！）
        mStreamer.setUrl("rtmp://mobile.kscvbu.cn/live/{streamName}");
// 设置预览分辨率, 当一边为0时，SDK会根据另一边及实际预览View的尺寸进行计算
        mStreamer.setPreviewResolution(480, 0);
// 设置推流分辨率，可以不同于预览分辨率（不应大于预览分辨率，否则推流会有画质损失）
        mStreamer.setTargetResolution(480, 0);
// 设置预览帧率
        mStreamer.setPreviewFps(15f);
// 设置推流帧率，当预览帧率大于推流帧率时，编码模块会自动丢帧以适应设定的推流帧率
        mStreamer.setTargetFps(15f);
// 设置视频码率，分别为初始平均码率、最高平均码率、最低平均码率，单位为kbps，另有setVideoBitrate接口，单位为bps
        mStreamer.setVideoKBitrate(600, 800, 400);
// 设置音频采样率
        mStreamer.setAudioSampleRate(44100);
// 设置音频码率，单位为kbps，另有setAudioBitrate接口，单位为bps
        mStreamer.setAudioKBitrate(48);
        /**
         * 设置编码模式(软编、硬编)，请根据白名单和系统版本来设置软硬编模式，不要全部设成软编或者硬编,白名单可以联系金山云商务:
         * StreamerConstants.ENCODE_METHOD_SOFTWARE
         * StreamerConstants.ENCODE_METHOD_HARDWARE
         */
        mStreamer.setEncodeMethod(StreamerConstants.ENCODE_METHOD_SOFTWARE);
// 设置屏幕的旋转角度，支持 0, 90, 180, 270
        mStreamer.setRotateDegrees(0);
// 设置开始预览使用前置还是后置摄像头
        mStreamer.setCameraFacing(CameraCapture.FACING_FRONT);
    }
    override fun onResume() {
        super.onResume()
        // 一般可以在onResume中开启摄像头预览
        mStreamer.startCameraPreview()
        // 调用KSYStreamer的onResume接口
        mStreamer.onResume()
        // 如果onPause中切到了DummyAudio模块，可以在此恢复
        mStreamer.setUseDummyAudioCapture(false)
    }

    override fun onPause() {
        super.onPause()
        mStreamer.onPause()
        // 一般在这里停止摄像头采集
        mStreamer.stopCameraPreview()
        // 如果希望App切后台后，停止录制主播端的声音，可以在此切换为DummyAudio采集，
        // 该模块会代替mic采集模块产生静音数据，同时释放占用的mic资源
        mStreamer.setUseDummyAudioCapture(true)
    }

    override fun onDestroy() {
        super.onDestroy()
        // 清理相关资源
        mStreamer.release()
    }
}



